根据元素的排名对数据框进行排序并创建新列 | 您所在的位置:网站首页 › pandas groupby排序 › 根据元素的排名对数据框进行排序并创建新列 |
我有以下数据帧: import pandas as pd df = pd.DataFrame( { 'id': [1, 1, 1, 1, 2, 2,2, 2, 3, 3, 3, 3], 'name': ['A', 'B', 'C', 'D','A', 'B','C', 'D', 'A', 'B','C', 'D'], 'Value': [1, 2, 3, 4, 5, 6, 0, 2, 4, 6, 3, 5] }, columns=['name','id','Value'])`我可以使用id和value对数据进行排序,如下所示: df.sort_values(['id','Value'],ascending = [True,False])我打印的表格将显示如下: name id Value D 1 4 C 1 3 B 1 2 A 1 1 B 2 6 A 2 5 D 2 2 C 2 0 B 3 6 D 3 5 A 3 4 C 3 3如果列名中的元素是最高值,我想创建4个新列 (Rank1,Rank2,Rank3,Rank4),列Rank1将被指定为1,否则为0.如果列名中的元素是第二高值,则列Rank2将被指定为1,否则为0.Rank3和Rank4也是如此. 我怎么能这样做? 谢谢. 泽普 1> jezrael..: 使用: df = df.join(pd.get_dummies(df.groupby('id').cumcount().add(1)).add_prefix('Rank')) print (df) name id Value Rank1 Rank2 Rank3 Rank4 3 D 1 4 1 0 0 0 2 C 1 3 0 1 0 0 1 B 1 2 0 0 1 0 0 A 1 1 0 0 0 1 5 B 2 6 1 0 0 0 4 A 2 5 0 1 0 0 7 D 2 2 0 0 1 0 6 C 2 0 0 0 0 1 9 B 3 6 1 0 0 0 11 D 3 5 0 1 0 0 8 A 3 4 0 0 1 0 10 C 3 3 0 0 0 1细节: 对于每组使用的计数GroupBy.cumcount,然后添加1: print (df.groupby('id').cumcount().add(1)) 3 1 2 2 1 3 0 4 5 1 4 2 7 3 6 4 9 1 11 2 8 3 10 4 dtype: int64对于指标列使用get_dumes有add_prefix: print (pd.get_dummies(df.groupby('id').cumcount().add(1)).add_prefix('Rank')) Rank1 Rank2 Rank3 Rank4 3 1 0 0 0 2 0 1 0 0 1 0 0 1 0 0 0 0 0 1 5 1 0 0 0 4 0 1 0 0 7 0 0 1 0 6 0 0 0 1 9 1 0 0 0 11 0 1 0 0 8 0 0 1 0 10 0 0 0 1 |
CopyRight 2018-2019 实验室设备网 版权所有 |